236c8e
@@ -33,6 +33,7 @@
import org.apache.camel.language.simple.SimpleLanguage;
 import org.apache.camel.util.StringQuoteHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.jdbc.core.ArgumentPreparedStatementSetter;
 
 /**
  * Default {@link SqlPrepareStatementStrategy} that supports named query parameters as well index based.
@@ -91,19 +92,30 @@
public class DefaultSqlPrepareStatementStrategy implements SqlPrepareStatementSt
 
     @Override
     public void populateStatement(PreparedStatement ps, Iterator<?> iterator, int expectedParams) throws SQLException {
+        if (expectedParams <= 0) {
+            return;
+        }
+
+        final Object[] args = new Object[expectedParams];
+        int i = 0;
         int argNumber = 1;
-        if (expectedParams > 0) {
-            while (iterator != null && iterator.hasNext()) {
-                Object value = iterator.next();
-                LOG.trace("Setting parameter #{} with value: {}", argNumber, value);
-                ps.setObject(argNumber, value);
-                argNumber++;
+
+        while (iterator != null && iterator.hasNext()) {
+            Object value = iterator.next();
+            LOG.trace("Setting parameter #{} with value: {}", argNumber, value);
+            if (argNumber <= expectedParams) {
+                args[i] = value;
             }
+            argNumber++;
+            i++;
         }
-
         if (argNumber - 1 != expectedParams) {
-            throw new SQLException("Number of parameters mismatch. Expected: " + expectedParams + ", was:" + (argNumber - 1));
+            throw new SQLException("Number of parameters mismatch. Expected: " + expectedParams + ", was: " + (argNumber - 1));
         }
+
+        // use argument setter as it deals with various JDBC drivers setObject vs setLong/setInteger/setString etc.
+        ArgumentPreparedStatementSetter setter = new ArgumentPreparedStatementSetter(args);
+        setter.setValues(ps);
     }
 
     protected boolean hasNamedParameters(String query) {
@@ -131,7 +143,7 @@
public class DefaultSqlPrepareStatementStrategy implements SqlPrepareStatementSt
 
     private static final class PopulateIterator implements Iterator<Object> {
         private static final String MISSING_PARAMETER_EXCEPTION =
-            "Cannot find key [%s] in message body or headers to use when setting named parameter in query [%s]";
+                "Cannot find key [%s] in message body or headers to use when setting named parameter in query [%s]";
         private final String query;
         private final NamedQueryParser parser;
         private final Exchange exchange;
